home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Tele / C / Comet2.1.3.cpt / 3270XCMD / TNdrvr.c < prev    next >
Text File  |  1990-03-22  |  3KB  |  140 lines

  1. /* TNdrvr.c -- Copyright 1989 Cornell University */
  2.  
  3. #include <Memory.h>
  4. #include <Types.h>
  5. #include <Devices.h>
  6. #include <Desk.h>
  7.  
  8. #include "TNdrvr.h"
  9.  
  10. pascal void debugger()    extern 0xA9FF;   
  11.  
  12. pascal OSErr DRVROpen(ctlpb, dctl)
  13. CntrlParam * ctlpb;
  14. DCtlPtr dctl;
  15. {
  16.     struct storage * store;
  17.  
  18.     if (dctl->dCtlStorage != 0L)
  19.         /* just return, we've already been opened */
  20.         return(0);
  21.     
  22.     SetZone(SystemZone());
  23.     dctl->dCtlStorage = NewHandle((long)(sizeof(struct storage)));
  24.     SetZone(ApplicZone());
  25.     store = (struct storage *) * dctl->dCtlStorage;
  26.     if (store == 0L)
  27.         return(-1);
  28.  
  29.     store->tnopen = 0L;
  30.  
  31.     return(0);
  32. }
  33.  
  34.  
  35. pascal OSErr DRVRControl(ctlpb, dctl)
  36. CntrlParam * ctlpb;
  37. DCtlPtr dctl;
  38. {
  39.     long * args;
  40.      struct storage * store;
  41.      struct storage * tnargs;
  42.     char * tmpp;
  43.     OSErr retval;
  44.     OSErr (*cfunc)(); 
  45.         /* MPW C calls (*store->cfunc)() an "illegal function",
  46.             chokes on args if pascal (*pfunc)() */
  47.     
  48.     retval = 0;
  49.     HLock(dctl->dCtlStorage);
  50.     store = (struct storage *) *dctl->dCtlStorage;
  51.     args = (long *) &ctlpb->csParam[0];
  52.     
  53.     if (ctlpb->csCode == HTN_INIT) {
  54.         /* save 3270 vectors */
  55.  
  56.         tnargs = (struct storage *) (* ((long *) &ctlpb->csParam[0]));
  57.             /* first long of parameters points to array of vectors/pointers*/
  58.         *store = *tnargs;
  59.     }
  60.     else if (store->tnopen == (void (*)()) 0L) {
  61.         /* no go, TN3270 has not registered routines */
  62.         HUnlock(dctl->dCtlStorage);
  63.         return(HTNR_NOTN);
  64.     }
  65.     
  66.     if (ctlpb->csCode == HTN_STATUS) {
  67.         cfunc = store->tnstatus;
  68.         retval = (*cfunc)(args);
  69.         /* called function fills in first long in csParam, -> screen buffer */
  70.     }
  71.     else if (ctlpb->csCode == HTN_SENDSTR) {
  72.         cfunc = store->tnsendstr;
  73.         retval = (*cfunc)(*args);
  74.     }
  75.     else if (ctlpb->csCode == HTN_SENDCMD) {
  76.         cfunc = store->tnsendcmd;
  77.         retval = (*cfunc)(*args, *(args+1));
  78.     }
  79.     else if (ctlpb->csCode == HTN_CONNECT) {
  80.         cfunc = store->tnconnect;
  81.         retval = (*cfunc)(*args);
  82.     }
  83.     else if (ctlpb->csCode == HTN_CLOSE) {
  84.         cfunc = store->tnclose;
  85.         retval = (*cfunc)();
  86.     }
  87.     else if (ctlpb->csCode == HTN_QUIT) {
  88.         cfunc = store->tnquit;
  89.         retval = (*cfunc)();
  90.     }
  91.     else if (ctlpb->csCode == HTN_CURSOR) {
  92.         cfunc = store->tncursor;
  93.         retval = (*cfunc)(args);
  94.         /* called function returns cursor pos in first long in csParam */
  95.     }
  96.     else if (ctlpb->csCode == HTN_DRAW) {
  97.         cfunc = store->tndraw;
  98.         retval = (*cfunc)(*args);
  99.     }
  100.     else if (ctlpb->csCode == HTN_OPEN) {
  101.         cfunc = store->tnopen;
  102.         retval = (*cfunc)();                    /* open TN up */
  103.         *args = (long) store->tnscreen;            /* return 3270 buffer ptr */
  104.         *++args = (long) store->tncursor;        /* return 3270 cursor ptr */
  105.         *++args = (long) store->tnfield;        /* return 3270 field ptr */
  106.     }
  107.     HUnlock(dctl->dCtlStorage);
  108.     return(retval);
  109. }
  110.  
  111.  
  112.  
  113. pascal OSErr DRVRClose(ctlpb, dctl)
  114. CntrlParam * ctlpb;
  115. DCtlPtr dctl;
  116. {
  117.     DisposHandle(dctl->dCtlStorage);
  118.     return(0);
  119. }
  120.  
  121.  
  122. pascal OSErr DRVRPrime(ctlpb, dctl)
  123. CntrlParam * ctlpb;
  124. DCtlPtr dctl;
  125. {
  126.     /* never called */
  127.     return(0);
  128. }
  129.  
  130.  
  131. pascal OSErr DRVRStatus(ctlpb, dctl)
  132. CntrlParam * ctlpb;
  133. DCtlPtr dctl;
  134. {
  135.     /* never called */
  136.     return(0);
  137. }
  138.  
  139.  
  140.